import java.util.Map;

/**
 * @作者 钟先崟
 * @时间 2023-03-18 13:50
 * @说明 149. 直线上最多的点数
 * 给你一个数组 points ，其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。
 * 输入：points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
 * 输出：4
 */
public class Solution {
    public static void main(String[] args) {
//        System.out.println(maxPoints(new int[][]{{1, 1}, {3, 2}, {5, 3}, {4, 1}, {2, 3}, {1, 4}}));
//        System.out.println(maxPoints(new int[][]{{0, 0}, {1, 1}, {-1, 1}}));
//        System.out.println(maxPoints(new int[][]{{2, 3}, {3, 3}, {-5, 3}}));
        System.out.println(maxPoints(new int[][]{{0, 1}, {0, 0}, {0, 4}, {0, -2}, {0, -1}, {0, 3}, {0, -4}}));
    }

    /**
     * 执行用时：9 ms, 在所有 Java 提交中击败了86.90%的用户
     * 内存消耗：38.8 MB, 在所有 Java 提交中击败了 97.92%的用户
     * @param points
     * @return
     */
    public static int maxPoints(int[][] points) {
        int max = 1;
        for (int i = 0; i < points.length; i++) {
            for (int j = i + 1; j < points.length; j++) {
                int x = 2;
                for (int k = j + 1; k < points.length; k++) {
                    int a = (points[i][0] - points[j][0]) * (points[i][1] - points[k][1]);
                    int b = (points[i][0] - points[k][0]) * (points[i][1] - points[j][1]);
                    if (a == b) x++;
                }
                if (x > max) max = x;
            }
        }
        return max;
    }
}
